package vista;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
//import java.util.LinkedList;


import java.io.IOException;
import java.util.LinkedList;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.LineBorder;




import org.jdom.JDOMException;

import excepcionesPropias.ElArchivoNoExiste;
import XML.PuntajesMaximos;
//import XML.PuntajesMaximos;
import modelo.jugador.Jugador;
import modelo.vehiculos.Auto;
import modelo.vehiculos.Camioneta;
import modelo.vehiculos.Moto;
import modelo.vehiculos.Vehiculo;

@SuppressWarnings("serial")
public class VistaPuntaje extends JPanel{
	
	private ImageIcon fondo = new ImageIcon(getClass().getResource("/imagenes/vehiculos/fuegoColores.jpg"));
	private ImageIcon titulo = new ImageIcon(getClass().getResource("/imagenes/vehiculos/titulo.png"));
	ImageIcon titulo2 = new ImageIcon(titulo.getImage().getScaledInstance(295, 115, Image.SCALE_SMOOTH));
	private JLabel labelTitulo = new JLabel(titulo2);
	private ImageIcon autoIc = new ImageIcon(getClass().getResource("/imagenes/vehiculos/auto.gif"));
	private ImageIcon motoIc = new ImageIcon(getClass().getResource("/imagenes/vehiculos/moto.gif"));
	private ImageIcon camioIc = new ImageIcon(getClass().getResource("/imagenes/vehiculos/camioneta.gif"));
	private Image fuego = fondo.getImage();
	private Image vehiculoImg;
	private int ancho=200, alto = 100;
	private JLabel nombreJugador,puntosJugador;
	
	private JPanel generalCentral = new JPanel();
	
	private JPanel jugadorActual = new JPanel();
	
	
	private Jugador conductor;
	
	private PuntajesMaximos pjeMaximos = new PuntajesMaximos();
	private LinkedList<Jugador> rankJug;
	private String rutaPuntajes = "src/puntajesMaximos";
	JTextArea rankingTextArea = new JTextArea("",5,6);
	JScrollPane ranking = new JScrollPane(rankingTextArea);
	
	public VistaPuntaje(Jugador unJug) throws ElArchivoNoExiste{
		conductor = unJug;
		setSize(300,700);
		this.setBackground(Color.RED);
		setLayout(new BorderLayout());
		this.setLocation(700,0);
		this.setBorder(new LineBorder(Color.white,2));
		pintarVehiculoEnUso();
		
		
		//Panel Con Nombre y puntaje de Jugador Actual
		jugadorActual.setOpaque(false);
		jugadorActual.setLayout(new GridLayout(5,1,3,3));
		
 		JLabel name = new JLabel("Conductor:     ");
		name.setFont(new Font("Serif", Font.BOLD, 20));
		name.setForeground(Color.ORANGE);
		jugadorActual.add(name);
		
		nombreJugador = new JLabel(unJug.getNombre());
		nombreJugador.setFont(new Font("Serif", Font.ITALIC, 20));
		nombreJugador.setForeground(Color.red);
		jugadorActual.add(nombreJugador);
		
		//para poner el maximo de moviminetos
				JPanel movimientos = new JPanel();
				JLabel limite =new JLabel("Limite Movimientos:");
				limite.setFont(new Font("Serif", Font.BOLD, 20));
				limite.setForeground(Color.ORANGE);
				movimientos.add(limite);
				
				JLabel totalMov = new JLabel(unJug.getMaxMov()+"      ");
				totalMov.setFont(new Font("Serif", Font.ITALIC, 20));
				totalMov.setForeground(Color.YELLOW);
				movimientos.add(totalMov);
				movimientos.setOpaque(false);
				
				jugadorActual.add(movimientos);
		  
		JLabel puntuacion =new JLabel("Movimientos:    ");
		puntuacion.setFont(new Font("Serif", Font.BOLD, 20));
		puntuacion.setForeground(Color.ORANGE);
		jugadorActual.add(puntuacion);
		
		
		
		puntosJugador=new JLabel(Integer.toString(unJug.getPuntaje()));
		puntosJugador.setFont(new Font("Serif", Font.ITALIC, 20));
		puntosJugador.setForeground(Color.GREEN);
		jugadorActual.add(puntosJugador);
		
		

		//Genero Panel Con Ranking deJugador
		JPanel posiciones = new JPanel();
		JPanel jugadores = new JPanel();
		JPanel puntajes = new JPanel();
		JPanel acomodador = new JPanel();
		acomodador.setLayout(new BorderLayout());	

		
		//ACA agregar el ranking
		if(pjeMaximos.existeElArchivoDePuntajes(rutaPuntajes.concat("/maxScores.xml"))){
				try {
					rankJug = pjeMaximos.generarListaDeJugadores(rutaPuntajes);
				} catch (JDOMException e) {
					
					e.printStackTrace();
				} catch (IOException e) {
					
					e.printStackTrace();
				}
				int longRank = rankJug.size();
				posiciones.setLayout(new GridLayout(longRank,1,1,1));
				jugadores.setLayout(new GridLayout(longRank,1,1,1));
				puntajes.setLayout(new GridLayout(longRank,1,1,1));
				//String espacio;
				String pos;
				for (int i = 0 ; i < longRank; i++){
					Jugador elJug = rankJug.get(i);
					
					pos = Integer.toString(i+1);
					JLabel puesto = new JLabel(pos+" - ");
					JLabel nombre = new JLabel(elJug.getNombre());
					JLabel pje = new JLabel(Integer.toString(elJug.getPuntaje()));
					
					if (i % 2 == 0){
						puesto.setBorder(new LineBorder(Color.BLUE,2));
						nombre.setBorder(new LineBorder(Color.BLUE,2));
						pje.setBorder(new LineBorder(Color.BLUE,2));
					}else{
						puesto.setBorder(new LineBorder(Color.MAGENTA,2));
						nombre.setBorder(new LineBorder(Color.MAGENTA,2));
						pje.setBorder(new LineBorder(Color.MAGENTA,2));
					}
					
					posiciones.add(puesto);
					jugadores.add(nombre);
					puntajes.add(pje);
					
				}
				acomodador.add(posiciones, BorderLayout.WEST);
				acomodador.add(jugadores, BorderLayout.CENTER);
				acomodador.add(puntajes, BorderLayout.EAST);
				ranking.getViewport().setOpaque(false);
				ranking = new JScrollPane(acomodador);
		}else{
			String pos = Integer.toString(1);
			JLabel jugPje = new JLabel(pos+" - "+"Sin Registro"+"   "+"--"+"\n");
			jugPje.setForeground(Color.blue);
			rankingTextArea = new JTextArea(rankingTextArea.getText()+jugPje,10,12);
		}
	
		//
		ranking.setBackground(Color.red);
		ranking.setOpaque(false);
		
		//Junto los Paneles
		JPanel rank = new JPanel();
		rank.setLayout(new BorderLayout());
		rank.setSize(100,200);
		rank.add(new JLabel("~  GPS  ~"), BorderLayout.WEST);
		rank.add(ranking, BorderLayout.CENTER);
		rank.add(new JLabel("~  GPS  ~"), BorderLayout.EAST);
		rank.setOpaque(false);
		
		//Paneles Con titular
		JLabel rnk =new JLabel("Ranking:");
		rnk.setFont(new Font("Serif", Font.BOLD, 20));
		rnk.setForeground(Color.ORANGE);
		
		JPanel finalRank = new JPanel();
		finalRank.setOpaque(false);
		finalRank.setLayout(new BorderLayout());
		finalRank.add(rnk,BorderLayout.NORTH);
		finalRank.add(rank,BorderLayout.CENTER);
	
		//Agrego Al Panel Central
		generalCentral.setOpaque(false);
		generalCentral.setSize(300, 450);
		generalCentral.setLayout( new BorderLayout());
		generalCentral.add(jugadorActual,BorderLayout.NORTH);
		generalCentral.add(finalRank,BorderLayout.CENTER);
		
		//Agrego Paneles al general
		add(labelTitulo,BorderLayout.NORTH);
		add(generalCentral, BorderLayout.CENTER);
		
		//Coloco Label movil en la parte inferior
		JPanel espacio = new JPanel();
		espacio.setOpaque(false);
		JLabel m = new JLabel(" ");
		m.setFont(new Font(Font.SANS_SERIF,Font.PLAIN,75));
		m.setForeground(Color.black);
		m.setOpaque(false);
		espacio.add(m,BorderLayout.WEST);
		espacio.setSize(ancho,alto);
		espacio.setBorder(new LineBorder(Color.red,2));
		add(espacio, BorderLayout.SOUTH);

	}
	
	public void actualizarPuntaje(int puntaje){
		puntosJugador.setText(Integer.toString(puntaje));
		this.pintarVehiculoEnUso();
	}
		
	protected void paintComponent(Graphics g){
		super.paintComponent(g);
		g.drawImage(fuego, -675, -30,1600, 1000, this);
		g.drawImage(vehiculoImg, 50, 550,ancho, alto, this);
	}
		
	private void pintarVehiculoEnUso(){
		Class<? extends Vehiculo> claseMovil = conductor.getMovil().getClass();
		if (claseMovil == Auto.class) {
			vehiculoImg = autoIc.getImage();		
		
		}else if (claseMovil == Moto.class){
			vehiculoImg = motoIc.getImage();
			
		}else if (claseMovil == Camioneta.class){
			vehiculoImg = camioIc.getImage();			
		}
		repaint();
	}
	
}